package com.briup.ch08;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.function.BiConsumer;

public class Test8_HashMap {
    public static void main(String[] args) {
        Map<Integer,String> map=new HashMap<>();//改为LinkedHashMap就是维护插入顺序来
        //增 改 查询
        map.put(100,"hello");
        map.put(200,"world");
        map.put(150,"briup");//看插入顺序  按照key排序
        map.put(200,"abc");//key重复观察value结果  value顺序覆盖 所以put既是新增也是修改 key不存在就是新增，key存在就是修改
        map.put(300,"hello");//value重复  可重复
        System.out.println(map.size());
        System.out.println(map.isEmpty());//false
        System.out.println(map.containsKey(200));//true
        System.out.println(map.containsValue("hello"));
        System.out.println(map.containsValue("world"));
        System.out.println(map);
        System.out.println(map.get(200));
        //单个kv遍历:map中的所有价值对entry
        //entry:Set
        for(Map.Entry<Integer,String> en:map.entrySet()){
            System.out.println(en.getKey()+" : "+en.getValue());
            System.out.println(en.getValue()+"001");
        }
        //2.map中的所有key
        //key:Set
        for(Integer k:map.keySet()){
            System.out.println(k+map.get(k));
        }
        //3.map中的所有value-->不能使用key
        for(String value:map.values()){
            System.out.println(value);
        }
        //4.迭代器，但是map没有迭代器，因为他就是做大的接口，collection上面有iterator
        //但是他的keys/values可以使用迭代器
        Iterator<Integer> it=map.keySet().iterator();
        while(it.hasNext()){
            Integer k= it.next();
            System.out.println(k+map.get(k));
        }
        //5.使用Stream流
        map.forEach(new BiConsumer<Integer, String>() {
            @Override
            public void accept(Integer k, String v) {
                System.out.println(k+v);
            }
        });
        map.forEach((k,v)-> System.out.println(k+v));
        //删
        map.remove(200);
        System.out.println(map.get(200));
        map.clear();
        System.out.println(map.isEmpty());
        System.out.println("----------------");
        //hashMap
        HashMap<Integer,String> hmap=new HashMap<>();
        hmap.put(100,"hello");
        hmap.put(200,"world");
        hmap.put(100,"book");//覆盖写
        hmap.putIfAbsent(300,"briup");//如果不存在k 新增写
        hmap.putIfAbsent(100,"abc");//如果存在k 不做新增不做覆盖
        System.out.println(hmap);
        System.out.println(hmap.get(100));
        System.out.println(hmap.getOrDefault(100,"0"));//有k 就是原本的值
        System.out.println(hmap.getOrDefault(400,"0"));//无k 就是你写的默认值
        hmap.put(null,"abc");
        hmap.put(null,null);
        hmap.put(100,null);
        System.out.println(hmap);
    }
}
